"""6.4 【上下文类】Context 消息回调类MCP开发"""
from time import sleep

from mcp.server.fastmcp import FastMCP, Context
from mcp.types import RequestParams

#定义一个MCP服务器
mcp = FastMCP("Context MCP Server")

@mcp.tool()
async def process_data(batch_list:list[str],ctx:Context)->str:
    """
    批量处理数据
    :param batch_list: 列表形数据，包含多个数据项
    :param ctx: 上下文对象，无需客户端传递
    :return str:
    """
    print(" *** 调用了process_data ===")
    for index,item in enumerate(batch_list):
        #设置请求的头部
        ctx.request_context.meta = RequestParams.Meta(progressToken=ctx.request_id)
        #设置进度项
        await ctx.report_progress(index+1,len(batch_list),message=f"正在处理第{index+1}个数据项")

        #休眠2s
        sleep(2)
    return "批量的数据已经处理完成"



if __name__ == "__main__":
    #声明使用stdio传输协议,默认是sse协议
    mcp.run(transport="sse")
